package thimeeeee.Model;

//import thimeeeee.Skeleton;

public class Level {
	//Egy filed, aminek a segítségével betujuk járni a többit
    Field field;

    GameInfo gameInfo;
	Game game;
	Player palyer;
	Exit exit;
    //a legnagyobb szélesség és magasság --> a mezők száma
    int maxWidth, maxHeight;

    int bombCount;

	public Level(Game g)
    {
//        Skeleton.Create("Level");
//        Skeleton.StartFunc("Level()");
        game = g;
//        Skeleton.EndFunc("Level()", "void");
    }

    private void Bejar(Field f, double aTimeStamp)
    {
        //a fieldek által alkotott gráf bejárása, minden mezőn idle-t hívunk

        //ha még nem módosítottuk a timestampet, akkor még nem jártunk ezen a mezőn->bejárás innen folytatódik
        if (f.GetTimeStamp() < aTimeStamp);
        {
            //idle hívásakor az új időbélyeg rákerül a mezőre
            f.Idle(aTimeStamp);

            //minden szomszédra bejárás
            Field[] neighbors = f.GetNeighbors();
            for (int i = 0; i < neighbors.length; i++)
            {
                //rekurzió, ha a szomszéd létezik(nem null)
                if ((neighbors[i] != null) && (neighbors[i].GetTimeStamp() < aTimeStamp))
                {
                    Bejar(neighbors[i], aTimeStamp);
                }
            }
        }
    }

    public void Idle(double aTimeStamp){
        //feladata az összes field idle függvényének meghívása
        //ehhez egy teljes gráfbejárás szükséges
////        Skeleton.StartFunc("Level.Idle()");

        Bejar(field, aTimeStamp);

//        Skeleton.EndFunc("Level.Idle()", "void");
    }

    //Field beállítása
    public void SetField(Field f)
    {
//        Skeleton.StartFunc("Level.SetField(Field)");
        field = f;
//        Skeleton.EndFunc("Level.SetField(Field)", "void");
    }
    //Szaglás
    public void Trace() {
		throw new UnsupportedOperationException();
	}

	//Kapu kinyitása
    public void OpenExit() {
//		Skeleton.StartFunc("Level.OpenExit()");
        if (exit != null)
        {
            exit.Open();
        }
        else
        {
            System.out.println("Jó próbálkozás volt, de nincs kijárat");
        }
//        Skeleton.EndFunc("Level.OpenExit()", "void");
	}

    public void SetBombCount(int n)
    {
        bombCount = n;
    }

    public int GetBombCount()
    {
        return bombCount;
    }
    
    public boolean GetBomb()
    {
        if(bombCount == 0)
        {
            return false;
        }
        else
        {
            bombCount--;
            return true;
        }
    }


    //a térkép felrajzolását segítő propertyk get fgvei
    public int GetMaxWidth(){
        return maxWidth;
    }

    public int GetMaxHeight(){
        return maxHeight;
    }
}